package com.reflex;

import java.lang.reflect.Field;
import java.util.Arrays;
public class Text04 {
    /**
     * 主函数示例，演示了对Java String对象内部字符数组的访问和修改。
     * @param args 命令行参数
     * @throws Exception 可能抛出的异常，包括访问私有字段和类型转换异常等
     */
    public static void main(String[] args) throws Exception {
        // 初始化两个字符串对象，内容相同
        String str1 = "123abc";
        String str2 = "123abc";

        // 获取String类的Class对象
        Class<String> stringClass = String.class;

        // 获取String类中的"value"字段，它表示字符串的字符数组
        Field value = stringClass.getDeclaredField("value");

        // 允许访问私有字段
        value.setAccessible(true);

        // 获取str1字符串的字符数组表示
        char[] chars = (char[]) value.get(str1);
        System.out.println(Arrays.toString(chars));

        // 修改str1的字符数组内容为"hello"
        chars = new char[]{'h', 'e', 'l', 'l', 'o'};
        value.set(str1, chars);

        // 输出修改后的str1和未修改的str2
        System.out.println(str1);
        System.out.println(str2);

        // 再次初始化一个内容相同的字符串对象str3
        String str3 = "123abc";
        System.out.println(str3);
    }

}
